Very detailed explanation: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

Some more information, also demo in fact not much difference for most cast: http://blogs.sun.com/roller/page/cwebster?entry=double_check_locking

Even more discussion - http://www-128.ibm.com/developerworks/java/library/j-dcl.html

In Chinese - http://www.infoq.com/cn/articles/double-checked-locking-with-delay-initialization